package com.haohan.jingyuan.customer.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.haohan.jingyuan.customer.entity.CustomerTag;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 客户标签Mapper接口
 *
 * @ClassName CustomerTagMapper
 * @Description 客户标签数据访问层
 * @Author hexijun
 * @Time 2025/10/30 10:00
 * @Version 1.0
 */
@Mapper
public interface CustomerTagMapper extends BaseMapper<CustomerTag> {

    /**
     * 根据主键ID查询标签信息（查询未删除的记录，ukid=0）
     *
     * @param id 主键ID
     * @return 标签信息
     */
    CustomerTag findById(@Param("id") Long id);

    /**
     * 根据标签编码查询标签信息
     *
     * @param tagCode 标签编码
     * @return 标签信息
     */
    CustomerTag findByCode(@Param("tagCode") String tagCode);

    /**
     * 根据标签名称查询标签信息
     *
     * @param tagName 标签名称
     * @return 标签信息
     */
    CustomerTag findByName(@Param("tagName") String tagName);

    /**
     * 查询所有标签列表（按创建时间倒序）
     * 
     * @return 标签列表
     */
    List<CustomerTag> selectAll();

    /**
     * 根据标签类型查询标签列表（按创建时间倒序）
     * 
     * @param type 标签类型：1-客户标签；2-客户材料标签
     * @return 标签列表
     */
    List<CustomerTag> selectByType(@Param("type") Integer type);

    /**
     * 统计指定标签名称的数量
     *
     * @param tagName 标签名称
     * @return 数量
     */
    int countByName(@Param("tagName") String tagName);

    /**
     * 根据标签编码逻辑删除标签
     *
     * @param tagCode 标签编码
     * @return 影响行数
     */
    int logicalDeleteByCode(@Param("tagCode") String tagCode
            , @Param("modifier") String modifier);

    /**
     * 批量根据标签编码查询标签列表
     *
     * @param tagCodeList 标签编码列表
     * @return 标签列表
     */
    List<CustomerTag> findByCodeList(@Param("tagCodeList") Set<String> tagCodeList);

    /**
     * 批量根据标签编码和类型查询标签列表
     *
     * @param tagCodeList 标签编码列表
     * @param type 标签类型：1-客户标签；2-客户材料标签
     * @return 标签列表
     */
    List<CustomerTag> findByCodeListAndType(@Param("tagCodeList") Set<String> tagCodeList, @Param("type") Integer type);
}


